function add(...values) {
	let sum = 0;

	for (var val of values) {
		sum += val;
	}

	return sum;
}

add(2, 5, 3) // 10

/*
下面是一个 rest 参数代替arguments变量的例子。
 比较后可以发现， rest 参数的写法更自然也更简洁。
*/
function sortNumbers() {
	return Array.prototype.slice.call(arguments).sort();
	//arguments对象不是数组，而是一个类似数组的对象。所以为了使用数组的方法，必须使用Array.prototype.slice.call先将其转为数组。
}
const sortNumbers = (...numbers) => numbers.sort();


//注意， rest 参数之后不能再有其他参数（ 即只能是最后一个参数）， 否则会报错。
// 报错
function f(a, ...b, c) {
	// ...
}

//函数的length属性， 不包括 rest 参数。
(function(a) {}).length; // 1
(function(...a) {}).length; // 0
(function(a, ...b) {}).length; // 1
